#ifndef LOGUEADOR_H_
#define LOGUEADOR_H_

#include "../Common/Thread.h"
#include "Cliente.h"
#include "VectorSala.h"
#include "ArchivoUsuarios.h"

class Logueador: public Thread {
private:
	Cliente* cliente;
	VectorSala& vecSalas;
	ArchivoUsuarios& archUsuarios;
	bool estaCorriendo;
	
	//Comprueba nombre y contrasenia. Devuelve True, si se pudo loguear,
	//False si no.
	bool iniciarSesion(Usuario& user, const Json::Value& root);
	
	//Crea una cuenta de un usuario Devuelve True, si se pudo crear,
	//False si no.
	bool crearCuenta(Usuario& user, const Json::Value& root);
	
	//Inicia secion de un usuario. Devuelve True, si se pudo loguear,
	//False si no.
	bool logear(Usuario& user);
	
	//Agrega al jugador a una sala.
	void agregarASala();

	//Agrega el jugador a la sala seleccionada. Devuelve true si la pudo agregar
	//de lo contrario false
	bool seleccionarSala(const Json::Value& root);

	//Crea una sala y agrega al jugador. Devuelve true si la pudo agregar
	//de lo contrario false
	bool crearSala(const Json::Value& root);

	//Devuelve el maximo de jugadores que pude tener el nivel
	unsigned getMaximoJugadoresNivel(const unsigned& nivelElegido);

public:
	
	Logueador(Cliente* cliente, VectorSala& vec, ArchivoUsuarios& arch);
	
	////Metodo main de Logueador
	void startMethod();
	
	//Hace que salga del ciclo de iteracion y termine su ejecucion.
	void matar();
};

#endif /* LOGUEADOR_H_ */
